/**
 * unique
 * array: filter+indexOf / sort+reduce / Set
 * arrayObject:
 */

// filter + indexOf
// function unique(array) {
//   let res = [];
//   array.filter((key, index) => {
//     if (array.indexOf(key) === index) {
//       res.push(key);
//     }
//   });
//   return res;
// }

// function unique(array) {
//   let res = [];
//   array.sort();
//   for (let index in array) {
//     if (array[index] !== array[index - 1]) {
//       res.push(array[index]);
//     }
//   }
//   return res
// }

// function unique(array) {
//   array.sort().reduce((init, current) => {
//     if (init.length === 0 || init[init.length - 1] !== current) {
//       init.push(current);
//     }
//     return init;
//   }, []);
// }

// function unique(array) {
//   // return Array.from(new Set(array));
//   return [...new Set(array)];
// }

// 临时对象缓存数组项 key 值
// function unique(array, key) {
//   let result = [];
//   for (let i = 0; i < array.length; i++) {
//     let keyName = array[i][key];
//     if (template[keyName]) {
//       continue;
//     }
//     template[keyName] = true;
//     result.push(array[i]);
//   }
//   return result;
// }

function unique(array, key) {
  let cacheObject = {};
  return array.reduce((prev, current) => {
    cacheObject[
      current[key]
        ? ""
        : (cacheObject[current[key]] = true && prev.push(current))
    ];
  }, []);
}
